package com.zyf;

import java.util.Scanner;

/**
 * 4 移除元素
 * 给定一个数组 nums 和一个值 val 你需要原地移除所有数值等于val的元素,返回移除后数组的新长度,不要使用额外的数组空间
元素的顺序可以改变,你不需要考虑数组中超出新长度后面的元素

示例 1 
给定 nums = {3,2,2,3};  val = 3;
函数应该返回新的长度 2 , 并且 nums中的前两个元素均为 2
你不需要考虑数组中超出新长度后面的元素

 * @author lenovo
 * @Date 2020年7月2日
 * @Time 下午3:02:54
 */
public class _04_removeElements {

	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		System.out.println("输入一个数组长度 : " );
		int n = sc.nextInt();
		int[] arr1 = new int[n];
		System.out.println("输入一个长度为 " + n +"的数组 : " );
		for (int i = 0; i < arr1.length; i++) {
			arr1[i] = sc.nextInt();
		}
		System.out.println("输入要移出的值 : " );
		int m = sc.nextInt();
		int z = remove(arr1,m);
		System.out.println("新的数组长度为 : " + z);
		System.out.println("新的数组为 :");
		for (int i = 0; i < z; i++) {
			System.out.print(arr1[i] + " ");
		}
	}
	/**
	 * 移除元素方法
	 * @param arr1
	 * @param m
	 * @return 数组长度
	 * 
	 * 思路:
	 * length表示插入判断的位置,默认值是0,从第一个元素插入
	 * 循环判断第i个元素是不是等于m
	 * 不是就插入
	 * 循环结束后就是去除m元素的数组
	 * 返回数组长度,主函数输出长度length的数组中的字符
	 */
	public static int remove(int[] arr1 , int m) {
		int length = 0;//length表示插入判断的位置
		for (int i = 0; i < arr1.length; i++) {
			if (arr1[i] != m) {
				arr1[length] = arr1[i];
				length++;
			}
		}
		return length;
	}

}
